@echo off
:: ===========================================
:: 用户目录迁移脚本 - 将 C:\Users\xing\XXX 迁移到 D:\Users\xing\XXX
:: 并创建符号链接
:: 使用方法：运行后输入目录名，如  .android
:: ===========================================

setlocal

:: 设置变量
set USER_DIR=C:\Users\xing
set TARGET_ROOT=D:\Users\xing
set "PROMPT=请输入要迁移到 D 盘的目录名（例如 .lingma, .android）: "
set "DIR_NAME="
set /p DIR_NAME=%PROMPT%

:: 验证输入
if "%DIR_NAME%"=="" (
    echo 错误：未输入目录名，退出。
    pause
    exit /b 1
)

:: 定义源和目标路径
set "SOURCE_DIR=%USER_DIR%\%DIR_NAME%"
set "TARGET_DIR=%TARGET_ROOT%\%DIR_NAME%"

echo.
echo ================================
echo 正在迁移: %DIR_NAME%
echo 源路径: %SOURCE_DIR%
echo 目标路径: %TARGET_DIR%
echo ================================
echo.

:: 检查源目录是否存在
if not exist "%SOURCE_DIR%" (
    echo ❌ 错误：源目录不存在！
    echo 路径: %SOURCE_DIR%
    pause
    exit /b 1
)

:: 创建目标父目录
if not exist "%TARGET_ROOT%" mkdir "%TARGET_ROOT%"

:: 1. 复制数据（包含隐藏文件）
echo 正在复制文件...
xcopy "%SOURCE_DIR%" "%TARGET_DIR%" /E /H /I /Y /K /X
if errorlevel 4 goto copy_error

:: 2. 删除原目录
echo.
echo 正在删除原目录: %SOURCE_DIR%
rmdir /S /Q "%SOURCE_DIR%"
if errorlevel 1 (
    echo ❌ 删除原目录失败，请检查权限或文件是否被占用。
    pause
    exit /b 1
)

:: 3. 创建符号链接（Junction）
echo.
echo 正在创建符号链接: %SOURCE_DIR% --> %TARGET_DIR%
mklink /J "%SOURCE_DIR%" "%TARGET_DIR%"
if errorlevel 1 (
    echo ❌ 创建符号链接失败！请以管理员身份运行此脚本。
    :: 尝试恢复原数据
    echo 正在尝试恢复数据...
    xcopy "%TARGET_DIR%" "%SOURCE_DIR%" /E /H /I /Y
    echo 已恢复原目录，请解决问题后重试。
    pause
    exit /b 1
)

:: 成功完成
echo.
echo ✅ 成功！%DIR_NAME% 已迁移到 D 盘并创建符号链接。
echo 所有访问 %SOURCE_DIR% 的程序将自动使用 D 盘数据。
echo.
echo 提示：你可以在 D:\Users\xing\%DIR_NAME% 查看实际文件。
echo.

pause
exit /b 0

:: 错误处理
:copy_error
echo ❌ 复制失败！错误代码: %errorlevel%
echo 可能原因：权限不足、磁盘空间不足、文件被占用。
pause
exit /b %errorlevel%